package com.xadrez;

import com.xadrez.exception.NumeroDeJogadorExcessoException;
import com.xadrez.controlador.MovimentoControlador;
import com.xadrez.ia.MiniMaxAB;
import com.xadrez.modelo.Jogador;
import com.xadrez.modelo.Peca;
import com.xadrez.modelo.Posicao;
import com.xadrez.modelo.Tabuleiro;
import com.xadrez.view.Creditos;
import com.xadrez.view.EscolhaDificuldade;
import com.xadrez.view.EscolhaJogadores;
import com.xadrez.view.Tela;
import com.xadrez.view.InicializadorView;
import com.xadrez.view.Menu;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Principal {

    private static Tabuleiro tabuleiro; // = new Tabuleiro();
    private static int dificuldade = 1;
    private static String menu;

    public static void inializaTabuleiro(int jogadores) {
        try {
//            Jogador jogadorUm = new MiniMaxAB("Jogador Humano", dificuldade);
            Jogador jogadorUm = new Jogador("Jogador 1");
            Jogador jogadorDois;
            if (jogadores == 1) {
                jogadorDois = new MiniMaxAB("IA", dificuldade);
            } else {
                jogadorDois = new Jogador("Jogador 2");
            }
            tabuleiro = new Tabuleiro(jogadorUm, jogadorDois);
        } catch (NumeroDeJogadorExcessoException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

//    public static void main(String[] args) {
//        inicializaJogo(2);
//    }

    public static void main(String[] args) {

        Menu.executa(args);
        System.out.println(Menu.getEscolha());
        while (Menu.getEscolha().equals("")) {
            //do nothing
        }
        menu = Menu.getEscolha();

        if (menu.equals("Iniciar")) {
            //iniciar Jogo
            EscolhaJogadores.executa(args);
            while (EscolhaJogadores.getEscolhaJogador() == 0) {
                // do nothing
            }
            inicializaJogo(EscolhaJogadores.getEscolhaJogador());
        }

        if (menu.equals("Dificuldade")) {
            //Escolha de dificuldade
            EscolhaDificuldade.executa(args);
            while (EscolhaDificuldade.getDificuldade() == 0) {
                //do nothing
            }
            dificuldade = EscolhaDificuldade.getDificuldade();
            inicializaJogo(1);
        }

        if (menu.equals("Creditos")) {
            Creditos.executa(args);

        }
    }

    public static Tabuleiro getTabuleiro() {
        return tabuleiro;
    }

    public static Peca getTabuleiro(Posicao posicao) {
        return tabuleiro.getQuadrados()[posicao.getX()][posicao.getY()];
    }

    public static void inicializaJogo(int jogadores) {
        inializaTabuleiro(jogadores);
        tabuleiro.inicializaPecas();
        //2. Inicializa View
        InicializadorView.inicializaCores();
        Tela.roda();
        //3. ComeÃ§a a partida
        //Ficaremos aqui dentro atÃ© terminar a partida.
        MovimentoControlador.rodaAPartida(tabuleiro.getJogadorUm(), tabuleiro.getJogadorDois());
    }
}
